#ifndef ORDERMANAGEMENTUI_H
#define ORDERMANAGEMENTUI_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSplitter>
#include <QTimer>
#include <QString>
#include <QList>
#include "../data/models.h"
#include "../business/ordermanager.h"
#include "orderlistwidget.h"
#include "orderdetailwidget.h"
#include "ordercontrolwidget.h"
#include "orderstatisticswidget.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 订单管理主界面类
 * 
 * 提供完整的订单管理功能，包括：
 * - 订单列表展示和管理
 * - 订单详情查看
 * - 订单状态变更操作
 * - 搜索过滤功能
 * - 实时统计信息展示
 * 
 * 专门针对1024*600分辨率优化
 */
class OrderManagementUI : public QWidget
{
    Q_OBJECT

public:
    explicit OrderManagementUI(QWidget *parent = nullptr);
    ~OrderManagementUI();

    /**
     * @brief 界面初始化
     */
    void initializeUI();
    
    /**
     * @brief 刷新数据
     */
    void refreshData();
    


public slots:
    // OrderManager信号响应
    void onOrderCreated(const Order& order);
    void onOrderStatusUpdated(const QString& orderId, OrderStatus oldStatus, OrderStatus newStatus);
    void onOrderCompleted(const QString& orderId);
    void onOrderCancelled(const QString& orderId, const QString& reason);
    
    // 子组件信号响应
    void onOrderSelected(const QString& orderId);
    void onSearchCriteriaChanged(const OrderSearchCriteria& criteria);
    void onStatusChangeRequested(const QString& orderId, OrderStatus newStatus);
    void onDeleteOrderRequested(const QString& orderId);
    void onRefreshRequested();
    void onOrderDoubleClicked(const QString& orderId);
    
    // DataManager信号响应
    void onExternalFileChanged(DataType dataType, const QString& filePath);

private:
    /**
     * @brief 设置界面布局
     */
    void setupLayout();
    
    /**
     * @brief 设置信号槽连接
     */
    void setupConnections();
    
    /**
     * @brief 设置样式表
     */
    void setupStyleSheet();
    
    /**
     * @brief 加载订单数据
     */
    void loadOrders();
    
    /**
     * @brief 显示操作结果消息
     */
    void showOperationResult(const QString& message, bool success = true);
    
    /**
     * @brief 显示订单详情对话框
     */
    void showOrderDetailDialog(const Order& order);

private:
    // 子组件
    OrderListWidget* m_orderListWidget;
    OrderControlWidget* m_orderControlWidget;
    
    // 布局管理
    QVBoxLayout* m_mainLayout;
    QHBoxLayout* m_topLayout;
    
    // 业务对象
    OrderManager* m_orderManager;
    
    // 当前状态
    QString m_selectedOrderId;
    QList<Order> m_currentOrders;
    OrderSearchCriteria m_currentCriteria;
    
    // 定时器
    QTimer* m_refreshTimer;
    
    // 标志
    bool m_isInitialized;
};

#endif // ORDERMANAGEMENTUI_H
